約 5,442,173 件
https://w.atwiki.jp/pfm_ase/pages/47.html
キャンペーンスケジュール / ライブ / イベント / CD/DVD / 雑誌 / TV / ラジオ / ※7th シングルキャンペーンはこちら / ライブ / イベント / CD/DVD / 雑誌 / TV / ラジオ /
https://w.atwiki.jp/nightrun/pages/27.html
ガンスリンガー デザインコンセプト ほぼ全置き変えに近い性能変化 選択武器によって性能ががらっと変わる。 もちろん、ステータスによって得手不得手は残るでしょうが。 威力 高 グレネード>ガトリング>>スナイパーライフル>ショットガン>ハンドガン 低 範囲 高 グレネード>>ショットガン≒ガトリング>スナイパーライフル≒ハンドガン 低 ASPD 高 ガトリング>ハンドガン>ショットガン>>スナイパーライフル>グレネード 低 防御性能 高 ハンドガン>ショットガン>スナイパーライフル>>ガトリング≒グレネード 低 通称ボムと呼称する高コストの消耗品火力を扱えるのもガンスリンガーのみ。 スキル 名称 設置 動作確認 調整 備考 シングルアクション フリップザコイン トリプルアクション フライング マジカルバレット ディスアーム スネークアイ インクリージングアキュラシー チェーンアクション ラピッドシャワー デスペラード ガトリングフィーバー マッドネスキャンセラー トラッキング ピアーシングショット ディスアーム アジャストメント ダスト フルバスター スプレッドアタック グラウンドドリフト エナジーエミッション オリジナル ガンホリック オリジナル ディソーダー オリジナル ブリッツバースト オリジナル ロックオンストライク オリジナル フルチャージブラスト オリジナル ラインフレア オリジナル デスクラスター オリジナル グレネードショット オリジナル 装備品 育成ガイド 編集
https://w.atwiki.jp/halo3umineko/pages/45.html
キャンペーン キャンペーンモードについて、極めて簡単な仕様 キャンペーン攻略したいなら、Xbox C4 Halo3攻略や、Halo3攻略まとめwikiを参考に。 目次 キャンペーンキャンペーン難易度 マルチキャンペーン キャンペーン実績確保 スカル キャンペーン難易度 ノーマル アドバンス レジェンドと難易度があり、ノーマルは初心者向けに調整されている。 レジェンドは、1人でクリアするには、ゴーストリコンプレイをするしかないぐらい難しく、2人でやったら、大変だった。ただ4人でやれば、誰でもそれなりにクリアできると思う。 マルチキャンペーン マルチキャンペーンは、4人まで参加可能。 ただし、途中参加できないので、参加を受ける時は、ミッション完遂後にロビーに戻ったりするのが良い。 ミッションの途中でロビーに戻ると、またそのミッションからやりなおし。 ミッションの途中で味方が死ぬと、安全を確保するまで生き返れない。 親切に画面に表示してくれるので、味方が減ってきたら、誰か一人は安全地帯に撤退するのが良し。 全滅すると、直前のセーブポイントに戻される。 キャンペーン実績確保 どんな形であれ、レジェンドでクリアをすると、ノーマル、アドバンスクリアの条件も達成した事になる。 それだけで相当な実績を解除できる。 スカル スカルについての最低限の場所は、ムービーズに掲載しています。
https://w.atwiki.jp/mount0322/pages/5.html
キャンペーンリーク情報 キャンペーンプレイ動画 荒廃した風景と廃墟と化した建物が見えるステージ。 ストーリーに重要になるだろうriley(犬)を操作しているように見える。 水中のステージ。 途中black opsのヴァルキリーロケットのようなものを使用している。 トレイラー公開
https://w.atwiki.jp/hrken/pages/36.html
キャンペーン内容まとめ ミッション1 舞台:エリンディル大陸、ロダニア南南西、ヴァイス北の辺り 内容:街へ出る( 獲得:S・D 人物:マティアス 神殿のハゲ、そこそこ偉いんじゃね? アルバス=ハント ヘアの義父、弓の名手 ミッション2 舞台:エリンディル大陸、パリス同盟頭部、ヴァイス 内容:冒険者になる 獲得:S・A 人物:特になし ミッション3 舞台:エリンディル大陸、ヴァンスター帝国、“竜の祠” 内容:祠調査 獲得:S・C 人物:仮面の男 謎の美形男子、Sの剣について何か知っているようだ ミッション4 舞台:エリンディル大陸、ファンダリア王国、“竜の祠” 内容:「父さん!」「父さんと呼ぶな!」 獲得:S・I 人物:ウッドロウ=ファンダリア ヘアの父、ヒューリンの初老の男性 ミッション5 舞台:エリンディル大陸、ラーフ大洞窟 内容:「このアサルトシュラウドで、貴様に雪辱を果たす!」 獲得:S・S 人物:アペル=アーデラット シュネルの兄、口癖は「クッ、馬鹿な!」 今後の調査内容 Sの剣の6本目の所在 Sの剣の修復、強化方法 空の城への突入方法 妖魔、魔族、アンデッドの襲撃の増大の理由
https://w.atwiki.jp/ludens/pages/66.html
現在3話終了時 総合10レベル 所持経験点120点 世界崩壊まで残り75日 特殊裁定 FTEの世界のアイテムの買い物可能。 月衣を所持していればEX月衣の取得可能。 ワールドピース5個消費でリビルドの権利。 集まる場所、時間の確保が難しい気もしているからオンラインセッションが軸になるかな? 使うのはたぶん"どどんとふ”と“skype”の併用。何か他にオススメがあれば言ってください。 マイクない人は会話だけ聞いてチャットで発言すればいいと思うです。 夜だからマイクでも会話しにくいでしょうし、実家組は痛いロールプレイを家族に聞かれる可能性もあるわけで…。 当然顔を合わせてできるのであれば、それでシナリオを進めても構いません。 ようは卓をやりやすい環境でやろうね、というお話ですから。 GM、卓傾向 暫定GMはにわとりですよ、でもPLもやりたいから誰かたまには変わってくれると嬉しいな! ノリとしては上にあるALGキャンペーンと同じ感じで行きたいかなと思います。 その場にいる人でPC1を決めてその人主軸でお話を進めていくスタイル。 何かシナリオ思いついたら作るけど、基本はそれくらいの擬似?シナリオクラフトみたいな感じになるのではないでしょうか。 もちろんにわとり不在でも勝手にお話を進めてもいいです。どんどんやってください。 PLの募集 随時募集中です。参加表明は個人的に連絡してください。 企画者もオンセ経験ないんで、どうなるかは未知数ですがなんとでもなるでしょう。 卓予定日 未定です。誰かがいつやりたいと声を上げた日に集まることができればできると思います。 つまり面子次第です。誰かがやりたいと声を上げてから日付を合わせるのも当然あると思います。 臨機応変です。 レギュレーション セブンフォートレスメビウスで発売されているルールブック、サプリを全ての使用を許可します。 ただし、データが全てGMの手元にない可能性が高いので、データの質問とは難しいかも。 データ管理、成長等は個々でルルブを手元に置くなりリファを用意するなりでお願いします。 使用世界 世界の使用は第1世界から第8世界まで全て許可。 ただし、世界を一つ選んだらその世界のサプリメントに合わせた転職を行ってください。 例えばエンジェル→ニューブリードといった転職は認めません。 出身世界を変えたくなったらGMをやるなりしてかっこよくPCを散らしてください。 第二世界エルスゴーラのサイズルールは使用しません。フレーバーとして扱ってください。 スタイルクラス 好きなスタイルを選択してください。ただしシステムとしてはPT内でバラバラに割り振ることを推奨しているので、そのことをふまえた上で好きに選択してください。 アイテム制限 アイテムの購入、固定化は一般アイテムなら全世界のアイテムを購入可能とします。 ただし、魔導具に関しては幸運の宝石、死活の石、ポーション類のみ世界共通とします。 文明はその世界の力です。 魔法制限 魔法の購入、固定化は汎用魔法のみ世界共通とし、それ以外は発動魔法・装備魔装かかわらず他世界の物は基本的に使用不可とします。 魔導文明はその世界の力です。 八神魔法の“封印”は特別な理由がない限りその手前が最大値とします。 特技の制限 一般特技は世界共通で使用可能とします。ただし、その世界固有と思われるものは周りと相談してください。例えば ハーフブラッド:ドワーフ とかダメな気がします。 レベル 5レベルの50点からが自衛もできてスマートかなと基準もなく思ったからそこらスタートで。 もう最初から高レベルでいいよという人ばかりなら10とか15でもいいですけどオンセでガチ戦闘は時間の浪費やばそうですしねぇ。 何度かやってみてから高レベルに移行すればいいんじゃないでしょうか? 毎回その時点の最高レベルの人まで合わせるつもりです。 キャラクター設定に関して こんだけ世界があって、全部ちゃんと把握している人なんていません。 いっそのこと独自の世界観を作り上げてもいいと思います。 重要なのは皆で楽しむこと、それができるキャラなら大体許容できるんじゃないでしょうか。 その日に思いついたことを言う?いつも通りですね。 改まって言うほどのことではないことも一応書いてありますけど気分ですね。 大体言うべきことは書いてある…はずです。 こんな感じで進めて行きたいと思っていますよ? 何かあれば随時聞いてみてください。 たぶんこのページを見る人は知人だけでしょうし、連絡先とか記載しなくていいですよね?
https://w.atwiki.jp/mycampaign/pages/84.html
既存のキャンペーンを Eclipse に取り込むのは簡単です。 メニューの「ファイル」から「インポート」を開きます。 Select で「Wesnoth」>「Import Wesnoth Project」を選んで「次へ」行きます。 「Directory to import」にキャンペーンのフォルダーへのパス、「Project Name」にプロジェクト名(フォルダ名と同じがよいでしょう。)、「Wesnoth install」そのまま(wesnoth)として、「Finish」します。
https://w.atwiki.jp/imas_ml/pages/26.html
■実施中のキャンペーン▼友だち招待で限定アイドルGET! ▼コミュニティ登録で限定レアアイドルGET ■過去のキャンペーン▼事前登録キャンペーン コメント ■実施中のキャンペーン ▼友だち招待で限定アイドルGET! 友だちをアイドルマスターミリオンライブに招待すると、規定のガシャptが獲得できます。 さらに、招待を受けた友だちがプロデューサー研修を終了すると招待ptが獲得できます。 招待ptを交換することで、招待特典カードを入手することができます。 名前 期間 初期 覚醒1 覚醒2 覚醒3 第1弾 天海春香 2/27~3/31 23 59 HR「はじまりの朝 天海春香」 HR「かがやくために 天海春香」 HR「みんなでつくるステージ 天海春香」 HR「ふたりのスイートブレイク 天海春香」 第2弾 星井美希 4/1~5/2 16 59 HR「2人の休日 星井美希」 HR「グリーティング! 星井美希」 HR「グラビアスター! 星井美希」 HR「眠れる?森の美女 星井美希」 第3弾 高槻やよい 5/2~6/2 16 59 HR「頼れるお姉ちゃん 高槻やよい」 HR「元気100倍ステージ 高槻やよい」 HR「スペシャルご褒美 高槻やよい」 HR「スウィートドリーマー 高槻やよい」 第4弾 春日未来 6/2~7/2 16 59 HR「夢に向かって 春日未来」 HR「充実の瞬間 春日未来」 HR「溢れる想い 春日未来」 HR「いつまでも、ずっと 春日未来」 第5弾 箱崎星梨花 7/2~8/14 13 59 HR「煌びやかな朝 箱崎星梨花」 HR「箱入り娘の戦い 箱崎星梨花」 HR「輝きの星 箱崎星梨花」 HR「愛情タルト 箱崎星梨花」 第6弾 徳川まつり 8/14~9/11 13 59 HR「プリンセスシューズ 徳川まつり」 HR「プリンセスリング 徳川まつり」 HR「プリンセスティアラ 徳川まつり」 HR「浜辺のプリンセス 徳川まつり」 第7弾 佐竹美奈子 9/11~10/16 13 59 HR「自慢の腕前 佐竹美奈子」 HR「見事な手際 佐竹美奈子」 HR「豪華な食卓 佐竹美奈子」 HR「とっておきの衣装 佐竹美奈子」 第8弾 伊吹翼 10/16~11/13 13 59 HR「久々の休日 伊吹翼」 HR「モテモテの休日 伊吹翼」 HR「アイドルの休日 伊吹翼」 HR「おねだりキャッチ 伊吹翼」 第9弾 最上静香 11/13~12/16 13 59 HR「苦悩の回答 最上静香」 HR「画伯の回答 最上静香」 HR「渾身の回答 最上静香」 HR「全力パフォーマンス! 最上静香」 第10弾 エミリー 12/16~1/22 13 59 HR「微笑み歳の市 エミリー」 HR「笑顔の掘り出し物 エミリー」 HR「ぷくぷくだるまさん エミリー」 HR「和洋折衷の贈り物 エミリー」 第11弾 周防桃子 1/22~2/12 13 59 HR「喜びの演技 周防桃子」 HR「怒りの演技 周防桃子」 HR「哀しみの演技 周防桃子」 HR「プリンセスドール 周防桃子」 第12弾 松田亜利沙 2/12~3/13 59 HR「 朝イチライブ! 松田亜利沙」 HR「ビリビリ電波ライブ 松田亜利沙」 HR「次は私の番! 松田亜利沙」 第13弾 永吉昴 3/13~4/28 13 59 HR「目指せガーリー! 永吉昴」 HR「アダルティにも挑戦! 永吉昴」 HR「この日一番のドキドキ 永吉昴」 第14弾 二階堂千鶴 4/28~5/30 13 59 HR「産地直送のセレブ 二階堂千鶴」 HR「とれたて新鮮のセレブ 二階堂千鶴」 HR「みんなのお嬢様アイドル 二階堂千鶴」 ※招待特典カードは社長クエスト「バトルスタンプを完成せよ」でも入手可能です。 ※招待特典カードはログインボーナスの報酬として入手可能です。 ※招待特典カードは招待期間内でのトレードがおこなえません。 関連ページ:社長クエスト ▼コミュニティ登録で限定レアアイドルGET 公式コミュニティに入るとR「思い出を一緒に 萩原雪歩」が貰えます。 届くの遅いので騒がない ■過去のキャンペーン ▼事前登録キャンペーン ミリオンライブに事前登録すると限定レアカードがもらえた。 http //wpp.jp/imas-million/ R「ステージを待つ 如月千早」 コメント このページに関わる情報提供等はこちらへどうぞ。 招待ptで交換できるカードは1枚目は1pt、2枚目は2pt、3枚目は5pt・・・と増加していきます。 - 2013-03-19 13 04 21 30回目のログインボーナスで覚醒HR春香入手、30継続登録でガシャチケレア入手でした - 2013-03-31 08 50 46 招待pt交換できるカードが1枚目1pt、2枚目2pt、3枚目2ptになってます。現在3枚目なので4枚目以降はわからないです。 - 2013-03-31 16 06 10 友だち招待は、先にグリ友になってないと招待特典カードが貰えませんので要注意です! - 2013-11-04 21 45 13
https://w.atwiki.jp/mycampaign/pages/81.html
(ダウンロードリンクをトップに移動しました。) 20170411版(主人公のジョブ選択システム実装) 20170401_2版(海水浴にイベント追加(現在3つ)) 20170326版(海水浴に悲しいエピソード追加) 20170324版(バグ修正。野外活動できます) 20170319_3版(全然嬉しくないオリジナル画像付き(野外活動開きません)) 20170319版(好感度チェックシステム実装(野外活動開きません)) 20170305_2版(野外活動の後日シナリオ修正) 20170305版(海水浴シナリオ追加) 20170228版(放課後めぐルート) 20170225版(ミニゲーム統合、アルバイト本屋ルート作りかけ) 20170219版(ミニゲーム作成中(一応クリアできなくもない)) 20170218版(ミニゲーム作りかけ) 20170212_2版(一通りラストまでプレイできる。) 20170212版(一通りプレイできる。ただしラストは一部キャラ分のみ。) 20170211版(野外授業のシナリオを直してみた。ただし、次のシナリオは直してないので、死傷者が出ると変な挙動をする。) 20170204_2版(人数を増やしてみた。ただし、放課後の教室まで(当然、これまでとの互換性なし。)) 20170204版(アルバイトシナリオにマップ差し替え実装) 20170129_2版(野外授業シナリオ改良) 20170129版(野外授業シナリオ実装) 20170124版(アルバイトシナリオ実装、ただし今のところ皿洗いだけ) 20170122_2版(お買い物イベント実装、ただし第3章さらルートのみ) 20170122版(ヒロイン管理システム実装版、実際の操作はほとんど変更なし) 20170114_2版(一応エンディングまでプレイ可能) 20170114版(好感度システム実装)(前のバージョンとのセーブデータ互換性ないと思う。) 20170109版(主人公の名前システム実装) 20170108版(ちょっと修正) 20170107版(作ってみた) 2017.04.11 ゲームの始めに主人公のユニットを選べるようにした。 お仕着せだけではなく、ユニット名を直接入力することができる自由度の高さ! ということは、主人公をアンデッドにしてももんと名付けることも可能ですし、百合百合(あるいは男の娘)、フレンズ的楽しみ方もできるかもしれません。 (補足) やったことは次のような比較的簡単なこと [message] speaker=narrator image="wesnoth-icon.png" message= _ "主人公のユニットを決めよう。次から選んでもいいし、ユニット名を直接入力してもいいぞ。" #1つ目のオプション(実質何もしない) [option] message= _ "エルフの戦士(デフォルト)" [/option] #2つ目のオプション [option] message= _ "悪漢" [command] [set_variable] name=unit_of_hero value=Ruffian [/set_variable] [/command] [/option] #3つ目のオプション(直接入力) [option] message= _ "直接入力する(『OK』を押して次へ)。" [command] [message] speaker=narrator image="wesnoth-icon.png" message= _ "ユニット名を英語で正しく入力してください。" [text_input] variable=unit_of_hero [/text_input] [/message] [/command] [/option] [/message] #変数 unit_of_hero に代入されたユニットに変化させる {TRANSFORM_UNIT (id=hero) ($unit_of_hero)} なお、「Elvish Shaman」と直接入力するとエルフの呪術師になるが、「femele^Mage」などとやっても女魔術師になったりはしない。 海水浴のイベントもちょこちょこ書いている最中。 2017.04.01 何やら最近、(非公式)ファンサイトのキャンペーン作成関係の記事が急激に充実している。敷居が下がるのはよいことだ。 これを機に、泥沼に足を踏み入れる人が増えることを期待している。泥沼といってもトカゲは出てこないが。 それはさておき、海水浴でのイベントの選択肢を増やしてみた。ただし、れべっかの水着姿とかは出てこない。期待する人はいないだろうが念のため。 あと、ありすルートも作る予定。 2017.03.26 海水浴で誰得?なエピソードを追加した。 一応、海水浴ではいくつかのイベントを用意して、どれが発生するかでその後の展開が微妙に変わるようにする構想がなくもない。 それがいつになるかはわからない。 ユニットのタイプを変えるのに TRANSFORM_UNIT というのを使うと簡単にできる。 Girl=unDead の「聖堂」のシナリオを書いた時には、知らなかったので、エルフのドルイドやシェードを步く死体に変えるのに苦労した。 使用例 {TRANSFORM_UNIT (type=Elvish Druid) (Walking Corpse)} {TRANSFORM_UNIT (id=Meg) (Walking Corpse)} 2017.03.24 2ちゃんねるの wesnoth スレで野外活動がエラーでプレイできないとの書き込みがあった。 シナリオを見直してみたら、修正するときに変えてはいけないところまで書き換えていたことが判明した。 なお、海水浴イベントを発生させるにはは、野外活動で変に頑張らない方がよいです。 2017.03.19その2 下手を承知で、このキャンペーンのためのオリジナル画像を作成した。 別に必要性はないのだが、作成のモチベーション維持のために、ぜひ必要だったのだ。(笑) それにしても、このゲームの世界観に全くそぐわない絵だなあ。 他にも追加したい絵があるので、本編の方の進行は停滞するかも。 2017.03.19 朝のあいさつで女子の好感度の大体の上がり具合がわかるシステムを実装した。 条件文が入れ子になっていて、少しややこしくなっているけど、要は、好感度の高さで反応が変わるようにしてあるだけ。 (なお、wesnoth 1.13 以降は、[elseif] が使えるようになるらしいので、そうなったらもう少しスッキリできると思う。) 好感度チェックマクロ #define GREETING HEROINE MESSAGE_1 MESSAGE_2 [if] [variable] name=favor_{HEROINE} greater_than=9 [/variable] [then] [message] speaker={HEROINE} message={MESSAGE_1} [/message] [message] speaker=hero message= _ "ああ、おはよう。$full_name_{HEROINE}。" [/message] [/then] [else] [if] [variable] name=favor_{HEROINE} greater_than=0 [/variable] [then] [message] speaker=hero message= _ "おはよう、$full_name_{HEROINE}。" [/message] [message] speaker={HEROINE} message= {MESSAGE_2} [/message] [/then] [else] [if] [variable] name=favor_{HEROINE} greater_than=-10 [/variable] [then] [message] speaker=hero message= _ "おはよう、$full_name_{HEROINE}。" [/message] [message] speaker={HEROINE} message= _ "フン。" [/message] [/then] [else] [message] speaker=hero message= _ "おはよう、$full_name_{HEROINE}。" [/message] [message] speaker={HEROINE} message= _ "・・・・" [/message] [message] speaker=hero message= _ "{HEROINE}ったら、あいさつもしてくれないなんて。" [/message] [/else] [/if] [/else] [/if] [/else] [/if] #enddef 実質同居と同じめぐとも学校であいさつしていたりとか、個別の修正は必要だけど。 2017.03.15 主人公が放課後の行動を選ぶときに、一度選んだ行動は非表示にしたいことがある。 そのような場合には、[option] 内で [show_if] を使うとよい。 例えば、さらとデートする前は変数「flag_afterschool_Sara」が0で、デート済みだと1になるようにしてあるような場合 よい例(大事なのは、どこでどういう風に [show_if] を使っているかだけなので、[command] の中身とかは飛ばしてください。) [message] speaker=narrator image="wesnoth-icon.png" message= _ "さあ、どうしよう?(試作品の都合で、放課後以外の選択肢もあります。)" [option] message= _ "さらに町を案内してもらおう。" [show_if] [variable] name=flag_afterschool_Sara equals=0 [/variable] [/show_if] [command] [set_variable] name=1st_day_after_school value=1st_day_Sara [/set_variable] [set_variable] name=flag_afterschool_Sara add=1 [/set_variable] [/command] [/option] [/message] とやるのがよいようである。 [show_if] の間に挟むのは、[if] と同じように考えていいようである。 これがわかるまでは、どうやってもうまくいかなくて困った。 悪い例(普通に [if] を使ったが、期待通りに動かなかった。) [message] speaker=narrator image="wesnoth-icon.png" message= _ "さあ、どうしよう?(試作品の都合で、放課後以外の選択肢もあります。)" [if] [variable] name=flag_afterschool_game_center equals=0 [/variable] [then] [option] message= _ "久しぶりにゲームセンターもいいな。" [command] [set_variable] name=1st_day_after_school value=game_center [/set_variable] [set_variable] name=flag_afterschool_game_center value=1 [/set_variable] [/command] [/option] [/then] [/if] [/message] 2017.03.08 いまだに変数の使い方でハマることが多い。今回もユニットの性別により、そのあとの展開が変わるようにしたかったのだが、上手くいかない。 上手くいかなかった記述 [if] [variable] name=$unit.gender equals="female" [/variable] [then] (ユニットが女だった時の展開) [/then] [else] (ユニットが男だった時の展開) [/else] [/if] よく考えてみたら、name=$unit.gender の「$」が余計だった。 $ がついていると、unit.gender が解釈されて、name=female あるいは、name=male ということになってしまう。 正しい記述 [if] [variable] name=unit.gender equals="female" [/variable] [then] (ユニットが女だった時の展開) [/then] [else] (ユニットが男だった時の展開) [/else] [/if] 2017.03.05(続き) 野外授業で負傷者が出た時の後で、りさがクラスに復帰できない不具合を修正した。 2017.03.05 定番(?)の海水浴イベントを作成。例によって尻切れとんぼ。 と言うか、このキャンペーンで水着回をやる意味がわからない。 心の赴くままにシナリオを増やしているが、後で整合性を取るのに苦労しそうな予感がする。まあ、最初から場当たり的に作っているから。 2017.02.26 本屋のバイト一応完成。伏線らしきものを敷きながら、回収の見込みなし。 放課後の過ごし方にめぐルートを実装した。食いしん坊萌えの方はどうぞ。 2017.02.25 ミニゲームをキャンペーン本体に統合。 なぜか、一部挙動がおかしくなったので、修正したが、原因が不明のままなので何か気持ち悪い。 アルバイトシナリオの本屋ルートを作り始めた。 2017.02.22 ミニゲームが一応完成。 これをキャンペーン本編に組み込む予定。 なお、だいぶ易しめに作ってあるので、プレイ中に退屈になったら、さっさと敵にやられるのがオススメ。 (ミニゲーム完成形(?))20170222版 シナリオ作成中に「Troll」を別の言葉に一括置換したら、キャンペーンを始めた途端にゲームオーバーになって焦った。 原因は、side の定義中の「controller」まで置換されてしまっているためと判明。 一括置換に関する不具合は、短い言葉だとよく発生するけど、まさか Troll でも発生するとは思わなかった。 2017.02.21 ゲームセンターシナリオがほぼゲームひとつ作ることと同じであることに気づいてしまったので、いったん独立したキャンペーン(といってもシナリオはひとつだけだけど)として作成中。 なんとなく、それっぽいものになりつつある。 もっとも、あくまでキャンペーンの中のミニゲームなので、それほど作り込むつもりはない(だんだん難易度が上がっていくとか)。 (ミニゲーム単独)20170221版 2017.02.19 ゲームセンターシナリオで一応クリアできるところまで作った。 作っていて気づいたのだが、今回のは、1シナリオを書くというより、ゲームひとつ作るのと同じだった(しかも、キャンペーン本編とはほとんど関係ない。)。 色々細かいところを考えていくと、まだまだやるべきところがたくさんある。 2017.02.18 当初実装していなかったてっぺいたちとゲームセンターに行くイベントを作成中。 見た目だけ何かに似ているゲームを楽しめますが、現在クリア不能です。 2017.02.12(続き) ラストの放課後の教室での告白を全女性キャラ分を作成した。 めぐルートとか切なくなるかも。りさルートもなかなか。 2017.02.12 野外授業で死傷者が出た時の後日のシナリオが全員に対応するように修正した。 男女でだいぶ扱いに差があるが、これでまた一通りプレイできるようになったはず。 ネイティヴでない悲しさで、hero を hiro としてしまったり、variable を valiable としてしまうような綴りミスをしょっちゅうしてしまって、余計な手間がかかってしまって困る。 2017.02.11 調子に乗って登場人物増やしたら、野外授業のシナリオでクラスを2グループに分けるのがものすごく大変になってしまった。 とにかく条件文と変数を使いまくってなんとかしたが、えらく込み入ったものになってしまった。 変数の使い方の基本 例えば、チームAとチームBがあって [if] めぐがチームAのとき [then] [set_variable] name=teamA value=1 [/set_variable] [/then] [/if] [if] さらがチームAのとき [then] [set_variable] name=teamA add=1 [/set_variable] [/then] [/if] と変数を設定し、次のような条件文でありすを振り分けようとしたとします。 [switch] variable=teamA [case] value=0 ありすはチームAに行く [/case] [case] value=1 ありすは半々の確率でチームAかチームBに行く [/case] [else] ありすはチームBに行く [/else] [/switch] これはうまく行きません。 なぜかというと、[switch]文の最初の value=0 成立しないからです。 具体的には、めぐもさらもBチームのときには、「teamA」なる変数そのものが存在しないので、「teamA」の値が0という状態も存在しません。 というわけで、 (最初に「teamA」という変数を宣言) [set_variable] name=teamA value=0 [/set_variable] [if] めぐがチームAのとき [then] [set_variable] name=teamA add=1 [/set_variable] [/then] [/if] [if] さらがチームAのとき [then] [set_variable] name=teamA add=1 [/set_variable] [/then] [/if] [switch] variable=teamA [case] value=0 ありすはチームAに行く [/case] [case] value=1 ありすは半々の確率でチームAかチームBに行く [/case] [else] ありすはチームBに行く [/else] [/switch] と書くとうまく行きます。たぶん。 2017.02.05 独自ユニットの追加(と言ってもほぼ既存ユニットの移植)を行った。 気をつけるのは、次の3点 _main.cfg の #ifdef CAMPAIGN_WESNOTH_GAKUEN 内に {binary_path]を明示しないとユニット画像が表示されないらしい。 同じく #ifdef CAMPAIGN_WESNOTH_GAKUEN 内に [+units] でユニットの定義をしているファイルへのパスを追加する。 既存のユニット定義を少し変えるだけで、ユニットの「説明文」に変更を加えない場合は、定義ファイルの最初の行の textdomain を変える必要はない。(Girl_unDead のときには、textdomain を変えてしまったため、ユニットの説明が全部英語で表示されてしまっている。) _main.cfg 設定例 #ifdef CAMPAIGN_WESNOTH_GAKUEN [binary_path] path=data/add-ons/Wesnoth_GAKUEN [/binary_path] {~add-ons/Wesnoth_GAKUEN/utils} [+units] {~add-ons/Wesnoth_GAKUEN/units} [/units] {~add-ons/Wesnoth_GAKUEN/scenarios} #endif 今回は、とりあえずやってみただけなので、ゲーム本体の添付はなし。 2017.02.04(続き) あらたに妹系キャラを実装し、一層非モテの妄想に近づいた。 やはり、登場人物を増やすと、いろいろなところに影響があり、面倒さが格段に増す感じ。 さらに、もう一人は増やす予定。 ユニットを移動させるときに、素直に道の上を歩かずに、オバQのように他人の家に不法侵入して進んでしまうことがある。 そのようなことを防止するには、通過させたいポイントを次のように順番に書いてゆくとよい。 [move_unit] id=hero to_x=4,7,6,12,19,19 to_y=3,6,7,10,7,6 [/move_unit] 当然ながら、xとyの数が違っているとエラーになってしまうので注意。 2017.02.04 アルバイトシナリオで、店内に入るとマップが変わるようにした。 [replace_map] を使用。 なお、元のマップと大きさが変わる場合には、expand=yes、shrink=yes にしておくのがよいみたい。 [replace_map] map="{~add-ons/Wesnoth_GAKUEN/maps/restaurant.map}" expand=yes shrink=yes [/replace_map] 2017.01.22(続き) 野外授業で味方キャラが死んでしまったときのイベントを作成した。 大怪我をして、数日休んだということして、次のシナリオで復活する。 ゲームの仕掛けとして作ろうと思っていたものは、一応大体出来たので、今後は、ストーリーの充実やら、登場人物のキャラ付け(どこかで見たようなツンデレとか、どこかで見たような寡黙系とか、どこかで見たようなポンコツ系とか)やら、似たようなコードのマクロ化を進めていくことになると思う。 ただ、分岐が増えていくと、辻褄合わせが格段に面倒になっていくのが目に見えているので、ほどほどにしておこう。(黙々と人類の歴史の可能性をたどっているかがりちゃんは、実はゲームクリエイターの心理状態の反映なのではないかと思う。) 2017.01.29 野外授業シナリオを作ってみた。 今回の課題は ユニットをランダムに2グループに分けること 他のユニットが主人公について動くこと の2点。 グループ分け 今回は3人ずつ2グループに分けるのだが、ゲームの特性上主人公グループに女子2人つけるので、逆にいえば女子を1人だけ別のグループに入れればいいだけなので、ランダムに女子1名を別グループ側に移動させるようにした。 [set_variable] name=team_mate rand=Sara,Alice,Rebecca [/set_variable] [move_unit] id=$team_mate to_x=3 to_y=9 [/move_unit] 次に元の位置いるだけのユニットを主人公側に移動。 [if] [have_unit] x,y=1,7 [/have_unit] [then] [move_unit] id=Sara to_x=4 to_y=5 [/move_unit] [/then] [/if] [if] [have_unit] x,y=1,8 [/have_unit] [then] [move_unit] id=Alice to_x=4 to_y=6 [/move_unit] [/then] [/if] [if] [have_unit] x,y=1,9 [/have_unit] [then] [move_unit] id=Rebecca to_x=3 to_y=5 [/move_unit] [/then] [/if] 追っかけシステム 偶数ターンごとに主人公の隣に 味方キャラ移動 敵キャラ登場 の順にイベントが発生するようにした。 (順番を間違えると味方の動きが不自然になる。) 見てみればわかるように、主人公のヘクスの真上に移動、登場するようになっているが、デフォルトでは、移動予定、登場予定のヘクスに既に別のユニットがいると近隣の別のヘクス移動、登場するようになっているので、主人公が消されることはない。 [event] name=turn 6 {STORE_UNIThero} [move_unit] id=Sara to_x=$hero_store.x to_y=$hero_store.y [/move_unit] [move_unit] id=Alice to_x=$hero_store.x to_y=$hero_store.y [/move_unit] [move_unit] id=Rebecca to_x=$hero_store.x to_y=$hero_store.y [/move_unit] {NAMED_UNIT 3 (Giant Rat) $hero_store.x $hero_store.y () () ()} [/event] (味方キャラの動きが3人分書いてあるが、このうち1人は [kill] されている。) 味方キャラが殺されてしまったときの対策とか、シナリオ開始場面でユニットが話者の陰に隠れてしまうなどの不具合が残っている。 2017.01.24 アルバイトシナリオを作成。ただし、選べるバイトはまだひとつだけ。 お買い物イベントで、所持金がマイナスになっても際限なく買い物ができることが発覚。このままでは主人公が多重債務者になってしまうので、所持金以上に買い物ができないように修正した。 [store_side] side=1 variable=side_hero [/store_side] [if] [variable] # - ここで所持金判定 name=side_hero.gold less_than=50 [/variable] [then] [message] speaker=hero message= _ "いけね。小遣いが足りないや。" [/message] [/then] [else] [set_variable] name=side_hero.gold sub=50 [/set_variable] [modify_side] side=1 gold=$side_hero.gold [/modify_side] [message] speaker=narrator image="wesnoth-icon.png" message= _ "お買い物をして、所持金が $side_hero.gold ゴールドになった。" [/message] [clear_variable] name=side_hero [/clear_variable] [/else] [/if] 2017.01.23 お買い物イベントについて、本家の WML リファレンスページを見たら、そのまんま [gold] でお金を増やしたり減らしたりできることがわかった。 よって、昨日のコードは [gold] - 特にしていしなければ、side 1 のゴールド amount=-50 [/gold] [store_side] side=1 variable=side_hero [/store_side] [message] speaker=narrator image="wesnoth-icon.png" message= _ "所持金が $side_hero.gold ゴールドになった。" [/message] [clear_variable] name=side_hero [/clear_variable] でもいける。 2017.01.22その2 お買い物イベントを追加してみた。 簡単に言えば、主人公サイドのゴールドを減らすだけ。 [store_side] - まずはサイドの情報を一時保存 side=1 variable=side_hero [/store_side] [set_variable] - サイドのゴールドを50減らす name=side_hero.gold sub=50 [/set_variable] [modify_side] - 減らしたあとのゴールドを適用 side=1 gold=$side_hero.gold [/modify_side] [message] speaker=narrator image="wesnoth-icon.png" message= _ "所持金が $side_hero.gold ゴールドになった。" [/message] [clear_variable] - 一時保存した情報を消去 name=side_hero [/clear_variable] あと、キャリーオーバーとか、ボーナスなどがないように [endlevel] を修正などなど。 村を占領した時も収入増えないようにするのはこれから。 2017.01.22 登場人物の管理を用意にするためのシステムをを作ってみた。 なぜ作ったかというと、今後登場人物を増やしたり、「好感度」以外のパラメーターを実装することになったとき楽をするため。 基本的には [set_valiables] を使っているのだが、これだと次の点で使いづらい。 登場人物を数字で管理しなければならない。 実際にこうなっているわけではないが、たとえば $heroines[0].full_name - ありす と $hiroines_Alice.name - ありす では、後者の方が人間にとってはわかりやすい。 (その昔、某自動車メーカーで記号みたいな名前の車を乱発したら、ディーラーでさえ車名が混乱して、業績が悪化したというまことしやかな話もある。) 途中で登場人物を追加したりすると、最初の順番がばらばらになってしまう。 はじめは、 $heroines[0].full_name - ありす だったのが、途中から $heroines[0].full_name - れべっか になったりしたら、もうわけわからない。 で、実装 まず、マクロ #define HEROINES NAME FULL_NAME [set_variables] name=heroines mode=insert - これ大事。「insert」にしないと、先にセットした heroines 変数がすべて消えてしまう。 [value] name={NAME} full_name=_ "{FULL_NAME}" favor=0 [/value] [/set_variables] [set_variable] - 好感度システム等で(数字ではなく)IDで指定できるようにしてる。 name=ID_{NAME} value={NAME} [/set_variable] [set_variable] - メッセージ内で名前を表示できるようにしてる。 name=full_name_{NAME} value=_ "{FULL_NAME}" [/set_variable] [set_variable] - 好感度を0にセット。 name=favor_{NAME} value=0 [/set_variable] #enddef 最初のシナリオでは {HEROINES Sara (さら)} {HEROINES Alice (ありす)} {HEROINES Rebecca (れべっか)} {NAMED_GENERIC_UNIT 2 "Elvish Shaman" 7 8 ($ID_Sara) ($full_name_Sara)} {NAMED_UNIT 2 "Mage" 13 8 ($ID_Alice) ($full_name_Alice) gender=female} {NAMED_UNIT 2 "Thief" 13 5 ($ID_Rebecca) ($full_name_Rebecca) gender=female} 前半でキャラを登録、後半でユニット作成。 2017.01.14(続き) 一応、エンディングを作成した。 一応、相手により会話内容が変わってきます。 今後は、プレゼントを購入(主人公のゴールドが減る。)、3人以上のイベント、ランダムで相手が変わるイベントとかも実装してみたい。 作ってみてわかったことは、ゲームの性格上、やたら変数と条件文を多用するということ。 特に登場人物が増えると幾何級数的に条件の入れ子が激しくなる。 (そんなわけで、今回は手抜きした。) やはりWMLは、この手のゲームは(作れなくはないけど)あまり向いてはいないように思う。 まあ、3つ以上の値の比較ができるマクロなどを作っていけば、多少は楽になるかも。 (たとえば、さら、ありす、れべっかを好感度が高い順にソートするとか、一定の好感度以上の子を全員を抽出するとか。) 2017.01.14 相手キャラの好感度変更システムを実装した。 1 第1章で、名前と好感度の変数セット。 #### #### キャラ名前登録(メッセージ内でキャラ名を表示させるため。) #### [set_variable] name=Sara_name value= _ "さら" [/set_variable] [set_variable] name=Alice_name value= _ "ありす" [/set_variable] [set_variable] name=Rebecca_name value= _ "れべっか" [/set_variable] [set_variable] name=Teacher_name value= _ "先生" [/set_variable] [set_variable] name=Teppei_name value= _ "てっぺい" [/set_variable] [set_variable] name=Sugisaku_name value= _ "すぎさく" [/set_variable] #### #### 好感度変数 #### [set_variable] name=favor_Sara value=0 [/set_variable] [set_variable] name=favor_Alice value=0 [/set_variable] [set_variable] name=favor_Rebecca value=0 [/set_variable] [set_variable] name=favor_Teacher value=0 [/set_variable] [set_variable] name=favor_Teppei value=0 [/set_variable] [set_variable] name=favor_Sugisaku value=0 [/set_variable] 2 次のようなマクロを用意し、イベントの結末に合わせて実行させる。 #define FAVOR ID VALUE [set_variable] name=add_favor_{ID} value={VALUE} [/set_variable] [set_variable] name=favor_{ID} add={VALUE} [/set_variable] [message] speaker=narrator image=misc/laurel.png message= _ "${ID}_nameの好感度が $add_favor_{ID} アップして $favor_{ID} になった。" [/message] #enddef #define FAVOR_DOWN ID VALUE [set_variable] name=add_favor_{ID} value={VALUE} [/set_variable] [set_variable] name=favor_{ID} sub={VALUE} [/set_variable] [message] speaker=narrator image=items/bones.png message= _ "${ID}_nameの好感度が $add_favor_{ID} ダウンして $favor_{ID} になってしまった。" [/message] #enddef 特定のユニットの名前を表示させるのに、もっと頭のいい方法が絶対にあると思うのだけど・・・$unit_id.name みたいのないのかな? あとは、蓄積ポイントに応じたエンディングを作れば、一応形になるかな。 2017.01.09 主人公の命名システムを実装した。 1 message に text_input タグを追加し、プレイヤーに名前をインプットさせて、変数に格納する。 [message] speaker=narrator image=wesnoth-icon.png message= _ "君の分身に名前をつけよう。" [text_input] variable=herosname [/text_input] [/message] 2 modify_unit で主人公の名前を変更する。 {MODIFY_UNIT (id=hero) name "$herosname"} 3 会話内でも変数を使って名前が表示されるようになる。 [message] speaker=Teppei message= _ "おお、よろしくな、$herosname! おれはてっぺいっていうんだ。" [/message] 2017.01.08 Wesnoth学園を一部修正。 よく使う store_unit と unstore_unit をマクロ化。 放課後の選択肢を充実。 仮のものであっても、ユニットIDを適当につけるとあとで苦労するので、適当だったユニットIDを名前と一致させた。 今後やりたいこと。 好感度システム実装 主人公の名前変更機能 登場人物のキャラは、そのうち大胆に変更するつもり。 2017.01.07 恋愛シュミレーション風キャンペーン「Wesnoth学園」を公開。 恋愛シュミレーションをやったことがないのだが、たぶんデートしたり贈り物をして相手の好感度を上げていって、最終的に誰を選ぶかでエンディングが変わってくると理解している。 主人公以外のユニットは、プレイヤーに操作させたくないので、別陣営としたため。シナリオごとに store_unit, unstore_unit を行うことで対応した。 マクロに MAKE_AI_SIDE_PERSISTENT, RECALL_AI_SIDE というAIの陣営をリコールできるっぽいのがあるのだが、使い方がわからない。 マクロの中身は一時的にAI陣営をプレイヤー操作陣営に変更しているらしい。 ここら辺に書いてある。http //svn.gna.org/svn/wesnoth/trunk/data/core/macros/side-utils.cfg 2016 09 19 _main.cfg ファイルをいじっていたら、キャンペーンが開かなくなってしまったが、Git で動いていた頃に戻すことができたので、事なきをえた。 やはり Git はおすすめです。まあ、今回のトラブルはこまめに保存と起動確認していれば、発生しなかったのだけど。 2016 05 21 Git お試しついでに、キャンペーンの続きを作成中。 今回は、特定のユニットの攻撃が当たると、特定ターンで味方に変わるマクロを作成してみた。 まずは攻撃が当たったことを登録する。とりあえず、role=poisoned にするようにしているが、多分手つきはよくないやり方と思われる。 自分から攻撃した時と攻撃を受けた時の2種類必要。 #define SET_SILENT_POISON [event] name=attacker hits [filter] type=Poison Bat [/filter] {MODIFY_UNIT (id=$second_unit.id) role poisoned} [/event] [event] name=defender hits [filter_second] type=Poison Bat [/filter_second] {MODIFY_UNIT (id=$unit.id) role poisoned} [/event] #enddef 指定したターンで陣営が1に変わる。敵のリーダーの場合、この瞬間に勝利(笑)。 #define CHANGE_SIDE TURN [event] name=turn {TURN} {MODIFY_UNIT (role=poisoned) side 1} [/event] #enddef 本当は、夜になると陣営が変わるようにしたいのだが、今のところ、いい方法がない。 2016 05 05 Git の試し用キャンペーンを作ってみたが、シナリオを読み込まず、3日間くらい悩んだ。 念のためマップファイルをテキストエディタで開いてみたら、わんさか余計がデータが書き込まれていて、それが悪さをしていた。 マップエディタで間違えて「シナリオとして」保存してしまったのがいけなかったようだ。 ところで、去年作り始めたキャンペーンはそのままお蔵入り状態。 2015 2 22(続き) 不死マクロをちょっと修正。 とりあえず負けたら消えてもらって、次のシナリオではちゃっかり復活するようにした。村で死んでも復活すると思う。 #define IMMORTAL UNIT_ID SCENARIO_ID ### 戦闘前に生前の状態を保持 ### [event] name=attack end first_time_only=no [filter_second] id={UNIT_ID} [/filter_second] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=second_unit.hitpoints less_than=1 [/variable] [then] [clear_variable] name=store_{UNIT_ID} [/clear_variable] [store_unit] [filter] id={UNIT_ID} [/filter] variable=store_{UNIT_ID} [/store_unit] {SELECT_NEXT_SCENARIO {SCENARIO_ID}} [/then] [else] [/else] [/if] [/event] ### こちらからの攻撃 ### [filter] と [variable] の name が違ってくる [event] name=attack end first_time_only=no [filter] id={UNIT_ID} [/filter] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=unit.hitpoints less_than=1 [/variable] [then] [clear_variable] name=store_XXX [/clear_variable] [store_unit] [filter] id={UNIT_ID} [/filter] variable=store_XXX [/store_unit] {SELECT_NEXT_SCENARIO {SCENARIO_ID}} [/then] [else] [/else] [/if] [/event] #enddef そして次のシナリオでは、 [event] name=prestart {RECALL AAA} {RECALL BBB} {RECALL CCC} [unstore_unit] variable=store_AAA x,y=24,15 [/unstore_unit] [unstore_unit] variable=store_BBB x,y=23,17 [/unstore_unit] [unstore_unit] variable=store_CCC x,y=25,17 [/unstore_unit] [/event] で、生きていれば普通にリコール、死んでいれば [unstore_unit] で復活。ただし、ヒットポイントが限りなくゼロに近いので、フルヒールや毒抜きなどをする必要があると思われる。 2015 2 22 2月1日に {MODIFY_UNIT (side=2) max_moves 1} として、敵が1マスしか動かないように設定してもうまく行かないことの続き。 試してみるとスタート前に設定しても、なぜか第2ターンからしか有効にならない。 仕方がないのでズルいが第1ターンだけ別の方法で敵を動けないようにすることを考えた。 調べてみると、[side]タグで controller=null にするとこの陣営のユニットはまったく動かないことがわかった。 そこで、第1ターンまでは controller=null にして、第2ターンから controller=ai に変更するするようにしてみた。 まず、当初の [side] 設定(本当は第7陣営まであるが、やることは同じなので省略) [side] side=2 controller=null team_name=ai no_leader=yes [ai] ai_special=guardian [/ai] [/side] 第1ターンで1マスしか動けないようにする。(なぜか第2ターン以降で有効になる。) [event] name=turn 1 {MODIFY_UNIT (side=2) max_moves 1} [/event] 第2ターンで、AI 操作に変更 [event] name=turn 2 [modify_side] side=2 controller=ai [/modify_side] [/event] なんだかあまりきれいなやり方ではないが、とりあえず意図した動きは実現したので、まあいいとする。 あとは、最初の方で作った不死マクロが、自ユニットが村にいるときには無効になってしまう(殺されてしまう)不具合の修正が残っている。 2015 2 11 レベルアップ用シナリオとして、敵を倒しても、次々と新手が現れるシナリオを作成。仕組みは簡単だが、敵味方双方の数や強さをうまく調整しないとレベルアップする前にやられてしまう。これは今後の課題。 まず、[scenario] タグに victory_when_enemies_defeated=no と一行入れておく。 次に、敵サイドの設定 [side] side=2 controller=ai team_name=ai no_leader=yes [goal] name=target [criteria] id=XXX [/criteria] value=5 [/goal] [/side] no_leader=yes としておくのが大事。これを忘れると、戦わずして勝利してしまう。 一体やられると次が現れる仕組み (ゲーム開始時に aaa というユニットがいる前提で) [event] name=die [filter] id=aaa [/filter] {UNIT 2 (Goblin Impaler) 12 10 (id=bbb)} [/event] あとは、同様に bbb や ccc がやられたらと同じことを続けてゆく。 [event] name=die [filter] id=bbb [/filter] {UNIT 2 (Troll Whelp) 19 11 (id=ccc)} {UNIT 2 (Skeleton Archer) 6 9 (id=ddd)} [/event] [event] name=die [filter] id=ccc [/filter] {UNIT 2 (Troll) 20 1 (id=eee)} {UNIT 2 (Skeleton) 20 10 (id=fff)} [/event] これを延々続けていくのは大変なので、fff がやられたら、bbb が再登場するというように、どこかでループするとよいと思う。 2015 2 1 昨日は [side] を配置するマクロで作成しはじめたが、具合が悪いので、[side] は普通に配置して、あとから {UNIT} マクロで敵を置くように方針転換した。 まず、普通に陣営を設置。ただし、リーダーなし設定なので、[scenario] タグ内に victory_when_enemies_defeated=no と1行入れておく。 [side] side=2 controller=ai team_name=ai no_leader=yes [/side] [side] side=3 controller=ai team_name=ai no_leader=yes [/side] [side] side=4 controller=ai team_name=ai no_leader=yes [/side] [side] side=5 controller=ai team_name=ai no_leader=yes [/side] [side] side=6 controller=ai team_name=ai no_leader=yes [/side] [side] side=7 controller=ai team_name=ai no_leader=yes [/side] 次にユニットを置くためのマクロを作成。 #define SET_ENEMIES TYPE2 TYPE3 TYPE4 TYPE5 TYPE6 TYPE7 {UNIT 2 {TYPE2} 24 11 ()} {UNIT 3 {TYPE3} 29 14 ()} {UNIT 4 {TYPE4} 29 19 ()} {UNIT 5 {TYPE5} 24 21 ()} {UNIT 6 {TYPE6} 19 19 ()} {UNIT 7 {TYPE7} 19 14 ()} #enddef さらに自軍リーダーの ID とタイプに応じて敵ユニットを置くマクロに統合。(当初は、自軍リーダーのレベルに対応させるつもりだったが、ユニット固有の変数にレベルがなかったので、タイプに変更した。) #define SET_ENEMIES_4_SELF_TYPE ID SELFTYPE TYPE2 TYPE3 TYPE4 TYPE5 TYPE6 TYPE7 [event] name=prestart [if] [have_unit] id={ID} type={SELFTYPE} [/have_unit] [then] {SET_ENEMIES {TYPE2} {TYPE3} {TYPE4} {TYPE5} {TYPE6} {TYPE7}} [/then] [else] [/else] [/if] [/event] #enddef マクロの実行例(結果は、昨日の画像と同じ) (マクロの中では、ユニットは ( ) で囲まないとエラーになる危険性高し。) {SET_ENEMIES_4_SELF_TYPE (XXX) (Sergeant) (Fugitive) (Elvish High Lord) (Dwarvish Lord) (Draug) (Orcish Sovereign) (Saurian Flanker)} あとは、自軍リーダーのタイプの数(=レベルの数)だけこのマクロを設定すればよい。) {SET_ENEMIES_4_SELF_TYPE (XXX) (Sergeant) (Thug) (Elvish Fighter) (Dwarvish Fighter) (Skeleton) (Orcish Leader) (Saurian Skirmisher)} {SET_ENEMIES_4_SELF_TYPE (XXX) (Lieutenant) (Bandit) (Elvish Lord) (Dwarvish Steelclad) (Revenant) (Orcish Ruler) (Saurian Ambusher)} {SET_ENEMIES_4_SELF_TYPE (XXX) (General) (Highwayman) (Elvish High Lord) (Dwarvish Lord) (Draug) (Orcish Sovereign) (Saurian Flanker)} {SET_ENEMIES_4_SELF_TYPE (XXX) (Grand Marshal) (Highwayman) (Elvish High Lord) (Dwarvish Lord) (Draug) (Orcish Sovereign) (Saurian Flanker)} 敵ユニットには、うろちょろしてもらいたくないので、ガーディアン設定をする。 [side] side=2 controller=ai team_name=ai no_leader=yes [ai] ai_special=guardian [/ai] (以下、第6サイドまで同様) さらに、移動能力を1マスに制限する。 [event] name=prestart {MODIFY_UNIT (side=2) max_moves 1} {MODIFY_UNIT (side=3) max_moves 1} {MODIFY_UNIT (side=4) max_moves 1} {MODIFY_UNIT (side=5) max_moves 1} {MODIFY_UNIT (side=6) max_moves 1} {MODIFY_UNIT (side=7) max_moves 1} [/event] あれ?うまくいかないな。 倒した敵に応じて、新規雇用ができるようにする。 [event] name=die [filter] type=Thug [/filter] [allow_recruit] side=1 type=Thug,Footpad,Thief,Poacher [/allow_recruit] [/event] [event] name=die [filter] type=Bandit [/filter] [allow_recruit] side=1 type=Thug,Footpad,Thief,Poacher,Bandit,Outlaw,Rogue,Trapper [/allow_recruit] [/event] [event] name=die [filter] type=Highwayman [/filter] [allow_recruit] side=1 type=Thug,Footpad,Thief,Poacher,Highwayman,Fugitive,Assassin,Huntsman,Ranger [/allow_recruit] [/event] 残りの敵(あと15ユニット!)も同じようにやってゆく。めんどくさ。 2015 1 31 今度は、自ユニットのリーダーのレベルに応じて、敵を変えるマクロに挑戦する。 まずは、敵ユニットのリーダーを配置するだけの簡単なマクロを作成。 #define SET_ENEMIES TYPE2 TYPE3 TYPE4 TYPE5 TYPE6 TYPE7 [side] side=2 controller=ai team_name=ai type={TYPE2} id=MMM canrecruit=yes [/side] [side] side=3 controller=ai team_name=ai type={TYPE3} id=NNN canrecruit=yes [/side] [side] side=4 controller=ai team_name=ai type={TYPE4} id=OOO canrecruit=yes [/side] [side] side=5 controller=ai team_name=ai type={TYPE5} id=PPP canrecruit=yes [/side] [side] side=6 controller=ai team_name=ai type={TYPE6} id=QQQ canrecruit=yes [/side] [side] side=7 controller=ai team_name=ai type={TYPE7} id=RRR canrecruit=yes [/side] #enddef 次のように実行してみる。 {SET_ENEMIES (Fugitive) (Elvish High Lord) (Dwarvish Lord) (Draug) (Orcish Sovereign) (Saurian Flanker)} するとこんな感じで指定したとおりの敵が配置される。 2015 1 27 不死マクロは一段落したので、次に特定のユニットから攻撃を受けた敵ユニットは次のターンから味方に変わるマクロを作成。 まず、攻撃を受けたことをなんらかの形で保存させる。 最初変数を使うことを考えたが、MODIFY_UNIT マクロを使ったら簡単にできた。格納するパラメーターはほかに影響のなさそうな role にした。 #define SET_SIDE_CHANGE_FLAG ### ###特定の攻撃を受けるとフラグを立てる ### [event] name=attacker hits first_time_only=no [filter] id=AAA [/filter] {MODIFY_UNIT (id=$second_unit.id) role kissed} [/event] #enddef 次のターンで味方に変わるマクロ。こっちも MODIFY_UNIT を利用。 ### ###次のターンで味方になってしまう ### #define SIDE_CANGE [event] name=new turn first_time_only=no {MODIFY_UNIT (role=kissed) side 1} [/event] #enddef さらに夜になると味方になるマクロに修正。[filter_location] タグを使用。location とあるけれど地形だけではなく、時間でも使える。 ### ###夜に味方になってしまう ### #define SIDE_CANGE [event] name=new turn first_time_only=no [filter_location] time_of_day=chaotic [/filter_location] {MODIFY_UNIT (role=kissed) side 1} [/event] #enddef 2015 1 25 事実上全滅(石化)しても負けにもならず、戦闘続行もできない不具合を解消するため、不死マクロを元に倒されると問答無用で次のシナリオに行くマクロを作成。 #define IMMORTAL_HERO UNIT_ID ### 戦闘前に生前の状態(位置)を保持 ### [event] name=attack first_time_only=no [store_unit] [filter] id={UNIT_ID} [/filter] variable=store_{UNIT_ID} kill=no [/store_unit] [/event] ### name=attack end だと死ぬ前に発動するが ### name=die だと死んでゲームオーバーになってしまうのでだめ。 ### まず攻撃されたとき [event] name=attack end first_time_only=no [filter_second] id={UNIT_ID} [/filter_second] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=second_unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_{UNIT_ID} [/unstore_unit] [clear_variable] name=store_{UNIT_ID} [/clear_variable] ### ###ファームへ [endlevel] result=victory next_scenario=00-training bonus=no [/endlevel] [/then] [else] [/else] [/if] [/event] ### こちらからの攻撃 ### [filter] と [variable] の name が違ってくる [event] name=attack end first_time_only=no [filter] id={UNIT_ID} [/filter] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] ### ###ファームへ [endlevel] result=victory next_scenario=00-training bonus=no [/endlevel] [/then] [else] [/else] [/if] [/event] #enddef 2015 1 24 不死マクロで戦闘不能(石化)したときに、戦闘を続けるか離れるかを選択させるために、まず次のようなマクロを作成 #define SELECT_NEXT_SCENARIO [message] speaker=narrator image="wesnoth-icon.png" message= _ "The unit cann t fight. What shall we do ?" [option] message= _ "Continue the battle." [command] [/command] [/option] [option] message=_ "Lieve the field." [command] [endlevel] result=victory next_scenario=00-training bonus=no [/endlevel] [/command] [/option] [/message] #enddef 次に不死マクロの [/modify_unit]の後ろに上のマクロを追加する。 [modify_unit] [filter] id={ID} [/filter] [status] petrified=yes [/status] [/modify_unit] {SELECT_NEXT_SCENARIO} [/then] こんな感じ。 ただし、このままだと、自分のすべてのユニットが死んだり石化してもシナリオが終了しないという罠が残っている。 2015 1 19 不死マクロはこのままではどこかの魔法少女みたいにどんなに傷つけられても攻撃し放題となってしまうので、攻撃や反撃不能にする必要があるが、これが意外に面倒である。 ひとつ安易な手法として、石化させてしまうというのがある。 マクロの [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] を [modify_unit] [filter] id={ID} [/filter] [status] petrified=yes [/status] [/modify_unit] に変えるだけでOK。 求めているのと違うが、当面これでやっていこうと思う。 なお、不死マクロはドレイン能力があるユニットでは、うまく機能しなくて死んでしまうことがあるが、そういうユニットには使わない予定なのでまあいいか。 2015 1 18 不死ギミックの続き 本当に死にそうなときのみ発動するように改良 ### 戦闘前に生前の状態(位置)を保持 ### [event] name=attack first_time_only=no [store_unit] [filter] id=XXX [/filter] variable=store_XXX kill=no [/store_unit] [/event] ### name=attack end だと死ぬ前に発動するが ### name=die だと死んでゲームオーバーになってしまうのでだめ。 [event] name=attack end first_time_only=no [filter_second] id=XXX [/filter_second] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=second_unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] ### 死なない程度にHPを1にする。 [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] [/then] [else] [/else] [/if] [/event] これだと敵から攻撃された時のみ有効なので、攻守反転バージョンも作成する必要があるので、次のように追加。 ### 戦闘前に生前の状態(位置)を保持 ### [event] name=attack first_time_only=no [store_unit] [filter] id=XXX [/filter] variable=store_XXX kill=no [/store_unit] [/event] ### name=attack end だと死ぬ前に発動するが ### name=die だと死んでゲームオーバーになってしまうのでだめ。 ### まず攻撃されたとき [event] name=attack end first_time_only=no [filter_second] id=XXX [/filter_second] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=second_unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] ### 死なない程度にHPを1にする。 [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] [/then] [else] [/else] [/if] [/event] ### こちらからの攻撃 ### [filter] と [variable] の name が違ってくる [event] name=attack end first_time_only=no [filter] id=XXX [/filter] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] ### 死なない程度にHPを1にする。 [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] [/then] [else] [/else] [/if] [/event] マクロし、さらに引数をつけられるようにして、いくつものユニットでも使えるようにする。 #define IMMORTAL ID ### 戦闘前に生前の状態(位置)を保持 ### [event] name=attack first_time_only=no [store_unit] [filter] id={ID} [/filter] variable=store_{ID} kill=no [/store_unit] [/event] ### name=attack end だと死ぬ前に発動するが ### name=die だと死んでゲームオーバーになってしまうのでだめ。 ### まず攻撃されたとき [event] name=attack end first_time_only=no [filter_second] id={ID} [/filter_second] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=second_unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_{ID} [/unstore_unit] [clear_variable] name=store_{ID} [/clear_variable] ### 死なない程度にHPを1にする。 [modify_unit] [filter] id={ID} [/filter] hitpoints=1 [/modify_unit] [/then] [else] [/else] [/if] [/event] ### こちらからの攻撃 ### [filter] と [variable] の name が違ってくる [event] name=attack end first_time_only=no [filter] id=XXX [/filter] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] ### 死なない程度にHPを1にする。 [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] [/then] [else] [/else] [/if] [/event] #enddef (先頭と最後の #行はコメントではなく、定義なので、省略してはいけない。) ほぼ、期待通りの動きをしたので、別ファイルにして、utils フォルダに保存し、_main.cfg にパスを追記 #ifdef 1_12_TEST # add here custom code {~add-ons/1-12-test/utils} {~add-ons/1-12-test/scenarios} [+units] {~add-ons/1-12-test/units} [/units] #endif (先頭と最後の #行はコメントではなく、定義なので、省略してはいけない。) このとき、必ずシナリオへのパスより先に書くことに注意。そうしないと、キャンペーンを開始するときに「そんなマクロありません(意訳)」と怒られてしまう。そのことをすっかり失念していてだいぶ時間を無駄にしてしまった。 2015 1 17 無謀にもあらたなキャンペーン作りに着手した。 今回の目玉は、セーブ&ロードをする必要がない(主人公が絶対に死なない)という画期的というか、既にゲームとはいえないキャンペーンである。 とりあえず、殺されても死なないギミックのプロトタイプは次みたいなかんじ。 [event] name=attack first_time_only=no [store_unit] [filter] id=XXX [/filter] variable=store_XXX kill=no [/store_unit] [/event] [event] name=attack end first_time_only=no [filter_second] id=XXX [/filter_second] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] [/event] これだと攻撃されると問答無用でHPが1になってしまうなど、いろいろ問題ありまくりだが、とりあえずどんなに攻撃されても死なないことだけは可能である。 それからいちいち攻撃前の状態を保持して、攻撃後に復旧するのはなんとなくスマートさに欠けるような気がする。 というか、(プログラミングできない分際で言うのも傲慢だけど)WML そのものがスマートさや統一感に欠けるところがあるように感じる。
https://w.atwiki.jp/lord_of_vermilion/pages/1877.html
竜胆しづね(ST) 基本情報 名前 竜胆しづね 種族 海種 ジョブ アタッカー 召喚コスト 30 <タイプ> 暗技 タイプ ガンスリンガーストラトス HP 400 ATK 30 DEF 50 覚醒 可 超覚醒 可 アーツ 無 CV 植田 佳奈 アビリティ 召喚 なし 覚醒 なし 超覚醒 殺菌殺菌ー! 攻撃力があがる。さらに、自身が攻撃した敵ユニットのHPを一定時間徐々に減らし、移動速度を下げる。 ステータス 状態 HP ATK/DEF 召喚 400 30/50 覚醒 450 50/70 超覚醒 500 150/130〔アビリティ発動時〕 DATA・イラスト・フレーバーテキスト +Ver3.3 Ver3.3 画像 身長 1.31[meter] 「しづねちゃんも、早く逃げるんだよ!」村に山賊が来ると聞き、料理店の老夫婦は雇ったばかりの少女に悲痛な声をかける。「よかったら用心棒もついでに雇いませんか?」とても可愛らしい笑顔だった。メイドの技はサバイバル! たとえ無人島に漂着しても主人に不便を感じさせないのがメイドの心意気。異世界ごときで不自由する竜胆しづねではない。料理の腕に接客術、可愛い笑顔で、たちまちバイト先をゲット!そのバイト先が危機とあっては黙っていられない。「さってっと、おっそうじ、おっそうじ! これで、きれーいに片付けちゃいましょうね!」火炎放射器をとりあげてにやりと笑う。とても物騒な笑顔だった。 体重 33[kg] 最大速度 ご主人様のためなら 願い 鏡磨様の元へ帰る むしろ 鏡磨様が来ないかしら 怨敵 姉 イラストレーター ワダアルコ 考察 超覚醒アビリティの「殺菌殺菌ー!」は自身の攻撃力上昇に加えて、 攻撃した相手の移動速度を5秒間下げ、5ダメージを3回与えるというもの。 下方修正を受けたこともあり速度低下率はそれほどでもないが、 序盤に荒らしに来る敵ユニットの帰還を遅らせながら攻撃を与え、そのままカウンターに繋げられる強さを持つ。 また、フリックでもアビリティの効果は発動するため、撤退中の敵を弾きながら倒す事もできる。 性能がディフェンダーのようなアタッカーであるため、海の序盤の防衛手段として選択肢になりうるカード。 また弱体性能が一定のため終盤もアタッカーとしての移動速度を活かしつつ主力の援護ができ邪魔にならない。 キャラクター説明 コラボレーション「ガンスリンガーストラトス」より登場。 今作では徹と同じくアニメ版イラストかつ「第十七極東帝都管理区」側の仕様で登場。 「殺菌殺菌ー!」は原作ゲームでの火炎放射発射ボイスである。 原作ゲームにおいて彼女の特徴とも言っていい「ハープーンガン」は持っておらず、標準型が装備していない火炎放射となっている。 LoVで興味を持ちガンストを始める場合、彼女の初期装備に火炎放射はないので注意しよう。 風澄徹同様に二十一世紀の過去に転移した筈がレムギアに迷い込むという形で来訪。 流石はメイドというべきなのか、風澄徹と違ってレムギアの環境に適応してしまっている。 寧ろ、ご主人様である鏡磨様もこの世界に迷い込むことすら願っている様子…。 徹と同じく「水要素の無い海種ゲスト」。理由は作品のイメージカラーから徹と同じ扱いにされた。 旧作では海種にも炎属性はいたことや、火炎放射器が機械っぽいからという理由もあるかもしれない。 余談だが、ご主人様である鏡磨様の中の人はLoV2までの主人公ニドや今作で紅蓮皇帝を演じている西田雅一氏だったりする。 関連カード コメント *編集が苦手な方はこちらへ情報提供お願いします 荒らし性能が特に高いわけではなく防衛向きのカードであるため□△デッキの荒らし枠としては向かない 特に現状コストが一つ上で主力として見れるステータスを持ち優秀なアーツを持つオオモノヌシが存在するため防衛メインでアタッカーを採用するならそちらの方がいいだろう -- (名無しさん) 2016-02-04 16 31 37 名前 コメント すべてのコメントを見る